package aventuraespacial;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;


/**
 * @author  woodoo
 */
public class BalaTriple extends Bala{

	/******************* CONSTANTES DE BALA TRIPLE ******************/
	
	
	static final int ANGULO_NORESTE=-67;
	static final int ANGULO_NOROESTE=-112;
	static final int ANGULO_NORTE=0;
	static final int ANGULO_DIBUJO_NORESTE=45;
	static final int ANGULO_DIBUJO_NOROESTE=-45;
	static final int ANGULO_DIBUJO_NORTE=0;
	/**
	 * @uml.property  name="rANGO"
	 */
	static final int RANGO=15;
	static final int ANCHO_BALA=9;
	static final int ALTO_BALA=9;
	static final String NOMBRE_BALA="balaTriple.png";
	static final String NOMBRE_ICONO_BALA="iconoBalaTriple.png";
	
	/**
	 * @uml.property  name="anguloDibujo"
	 */
	private int anguloDibujo;
	
	

	/******************* CONSTRUCTOR DE BALA TRIPLE ******************/
	
	public BalaTriple(double x, double y, double velocidad, double angulo){
		super(x,y,velocidad,angulo);
		 this.setForma(new Rectangle(Bala.ANCHO_BALA,ALTO_BALA));
		 this.setImagen(cargarImagen(NOMBRE_BALA));
		 this.anguloDibujo=0;
	}

	/***************************** GETTERS *********************************/
	
	@Override
	public int getAlto() {
		
		return ALTO_BALA;
	}

	@Override
	public int getAncho() {
		
		return ANCHO_BALA;
	}
	
	/**
	 * @return
	 * @uml.property  name="anguloDibujo"
	 */
	public int getAnguloDibujo() {
		return anguloDibujo;
	}

	/**
	 * @param anguloDibujo
	 * @uml.property  name="anguloDibujo"
	 */
	public void setAnguloDibujo(int anguloDibujo) {
		this.anguloDibujo = anguloDibujo;
	}
	/************************* IMPLEMENTACION DE METODOS*************************/
	
	
	

	@Override  //EspacioExterior.ANCHO_PANTALLA EspacioExterior.ALTO_PANTALLA
	public boolean fueraDePantalla() {
		if (this.x<(0) || this.x> (EspacioExterior.ANCHO_PANTALLA) ) return true;
        else if ( this.y< (0) || this.y> (EspacioExterior.ALTO_PANTALLA)) return true;
            else return false;
	}

	

	@Override
	public Bala identidad() {
		return new BalaTriple(this.x,this.y,this.velocidad,this.angulo);
	}

	

	@Override
	public Rectangle getBordes() {
		int mitadAncho= (int) (ANCHO_BALA/2 );
		int mitadAlto=(int) (ALTO_BALA/2) ;
		return new Rectangle((int)this.getX()-mitadAncho,(int)this.getY()-mitadAlto,ANCHO_BALA,ALTO_BALA);
		
	}
	
	@Override
	public void establecerModeloNave(Nave nave) {
		if(nave.getModeloBala().getRango()<this.getRango()){
			nave.setModeloBala(this);
		}
		
	}
	
	@Override
	public void impactarCon(ObjetoEspacial obj) {
		obj.setVivo(false);
		this.setVivo(false);
		
	}
	
	/**
	 * @return
	 * @uml.property  name="rANGO"
	 */
	@Override
	public int getRango() {
			return	RANGO;	
	}
	
	@Override
	public void guardarseEnNave(Nave nave) {
		this.setAnguloDibujo(ANGULO_DIBUJO_NORTE);
		nave.agregarBala(this);//esta es la que va en el medio
		
		/**bala que viaja en 45 grados*/
		BalaTriple balaAux1= (BalaTriple) this.identidad();
		balaAux1.setAnguloDibujo(ANGULO_DIBUJO_NORESTE);
		balaAux1.setAngulo(ANGULO_NORESTE);
		
		
		/**bala que viaja en 135 grados*/
		BalaTriple balaAux2= (BalaTriple) this.identidad();
		balaAux2.setAnguloDibujo(ANGULO_DIBUJO_NOROESTE);
		balaAux2.setAngulo(ANGULO_NOROESTE);
		
		nave.agregarBala(balaAux1);
		nave.agregarBala(balaAux2);
		
	}
	
	@Override
	public void dibujar(Graphics2D g) {
		AffineTransform identidad= new AffineTransform();
		AffineTransform trans= new AffineTransform();
		/*
		g.setTransform(identidad);
		g.translate(getX()-(ANCHO_BALA/2), getY()-ALTO_BALA/2);
		g.setColor(Color.green);
		g.fill(getForma());
		g.setTransform(identidad);
		g.setColor(Color.CYAN);
		g.drawRect((int)getX(),(int)getY(), 1,1);
		*/
		
		
		
		trans.setTransform(identidad);
		if(getAnguloDibujo()==ANGULO_DIBUJO_NORESTE)  trans.translate(x, y-(ALTO_BALA/2));
		else if(getAnguloDibujo()==ANGULO_DIBUJO_NOROESTE)  trans.translate(x-(ANCHO_BALA/2), y);
		else trans.translate(x-(ANCHO_BALA/2), y-(ALTO_BALA/2));
		trans.scale(3,3);
		trans.rotate(getAnguloDibujo());
		g.drawImage(getImagen(),trans,null);
		
		//MUESTRO EL CONTORNO DE COLISION
		if(ObjetoEspacial.isBordesActivados()){
			g.setTransform(identidad);
			g.setColor(Color.WHITE);
			g.draw(getBordes());
		}
	}

	@Override
	public String getNombreIcono() {
		
		return NOMBRE_ICONO_BALA;
	}
}
